/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logic.grafos;

import logic.Jugador;

/**
 *
 * @author Jose Gabriel Rivera
 */
public class GrafoFaltas extends Grafo implements java.io.Serializable{
    
    private int[] faltas;
    private int[] amarillas;
    private int[] rojas;
    private int[] faltasrecibidas;
    
    
    private Jugador[] local;
    private Jugador[] visitante;
    private int nroJugadores;
     
    public GrafoFaltas(Jugador[] local, Jugador[] visitante) {
        nroJugadores = local.length+visitante.length;
        //Instanciar arreglos de estadisticas
        faltas = new int[nroJugadores];
        amarillas = new int[nroJugadores];
        rojas = new int[nroJugadores];
        faltasrecibidas = new int[nroJugadores];
        
        this.local = local;
        this.visitante=visitante;
        
        //Crear nodos en el grafo
        for(int i=0;i<local.length;i++)
            this.añadirNodo(""+local[i].getEquipo()+" "+local[i].getNroDorsal()+" "+local[i].getPosicionPreferida());
        for(int i=0;i<visitante.length;i++)
            this.añadirNodo(""+visitante[i].getEquipo()+" "+visitante[i].getNroDorsal()+" "+visitante[i].getPosicionPreferida()); 
    }
    
    public void recorrerGrafo(){
//        3. Faltas realizadas y recibidas por jugador y por equipo.
        
        faltas = new int[nroJugadores];
        amarillas = new int[nroJugadores];
        rojas = new int[nroJugadores];
        faltasrecibidas = new int[nroJugadores];
        
        
        Nodo aux;
        NodoAdyacencia auxad;
        String informacion;
        String equipo1;
        String equipo2;
        String jugador1;
        String jugador2;
        aux= this.primero;
        //auxad=aux.getAdyacencias();

    
    
        while(aux!=null){  
            auxad=aux.getAdyacencias();
            //Toma al jugador que cometio las faltas 
            informacion= (String) aux.getInfo();
            equipo1= informacion.substring(0,1);
            jugador1=informacion.substring(2,4);
            //Busca los jugadores a los que el jugador 1 les hizo falta, suma la cantidad de faltas
            //que cometio el jugador uno y suma la cantidad de faltas recibidas por los jugadores
            //a los que jugador 1 les cometio falta 
            while(auxad!=null){ 
                informacion=(String) auxad.info.getInfo();
                equipo2= informacion.substring(0,1);
                jugador2=informacion.substring(2,4);
                if(auxad.auxPeso==0){
                if (equipo1.equals("0")){   
                    faltas[this.getJugador(jugador1, equipo1)]++;
                    faltasrecibidas[local.length+this.getJugador(jugador2, equipo2)]++;
                }else{
                     faltas[local.length+this.getJugador(jugador1, equipo1)]++;
                     faltasrecibidas[this.getJugador(jugador1, equipo1)]++;
                }
                } 
                
                if(auxad.auxPeso==1){
                     if (equipo1.equals("0")){   
                       amarillas[this.getJugador(jugador1, equipo1)]++;
                       faltas[this.getJugador(jugador1, equipo1)]++;
                       faltasrecibidas[local.length+this.getJugador(jugador2, equipo2)]++;
                     }else{
                       amarillas[local.length+this.getJugador(jugador1, equipo1)]++;
                       faltas[local.length+this.getJugador(jugador1, equipo1)]++;
                       faltasrecibidas[this.getJugador(jugador1, equipo1)]++;
                     }
                } 
                
                if(auxad.auxPeso==2){
                    if (equipo1.equals("0")){   
                       rojas[this.getJugador(jugador1, equipo1)]++;
                       faltas[this.getJugador(jugador1, equipo1)]++;
                       faltasrecibidas[local.length+this.getJugador(jugador2, equipo2)]++;
                     }else{
                       rojas[local.length+this.getJugador(jugador1, equipo1)]++;
                       faltas[local.length+this.getJugador(jugador1, equipo1)]++;
                       faltasrecibidas[this.getJugador(jugador1, equipo1)]++;
                     }                }
        
                auxad=auxad.getSiguiente();
            }
            aux=aux.getSiguiente();  
         
         
        }
    }
    
    
    
    
    public int getJugador(String jugador, String equipo){
        if(equipo.equals("0")){
            for(int i=0; i!=local.length;i++){
                if(jugador.equals(local[i].getNroDorsal()))
                    return i;
            }
        }else{
            for(int i=0; i!=local.length;i++){
                if(jugador.equals(visitante[i].getNroDorsal()))
                    return i;
            } 
        }
        return 0;
    }
    
    public void imprimirPanel(){
        Nodo aux=primero;
        NodoAdyacencia auxad;
        
        while(aux!=null){
            auxad=aux.getAdyacencias();
            if(auxad!=null){
            System.out.println( aux.getInfo());
            
            }
            while(auxad!=null){
               System.out.print("adyacencias:");
               System.out.println( auxad.getInfo().getInfo());
               System.out.println( auxad.getPesoaux() );
               auxad=auxad.getSiguiente();
            }
            aux=aux.siguiente;
        }
    }
    
    public int tieneRoja(String elQueDaLayuka){
        Nodo aux=primero;
        NodoAdyacencia auxad;
        int cont=0;
        
        while(aux.getInfo().toString().compareTo(elQueDaLayuka)!=0){
            
            aux=aux.getSiguiente();
        }
        
        auxad=aux.getAdyacencias();
        
        if(auxad==null){
            return 0;
        }
        
        while(auxad!=null){
            if(auxad.getPesoaux()==2 ){
                return 1;
            }
            if(auxad.getPesoaux()==1){
                cont++;
            }
            if(cont==2){
                return 1;
            }
            auxad=auxad.siguiente;
        }
        
        
        
      return 0;
    }
    
    public void imprimirArrays(){
        System.out.println("Faltas");
        for(int i=0;i<faltas.length;i++){
            System.out.println("Este es el jugador: "+i +":"+faltas[i]);
        }
        System.out.println("Amarillas");
         for(int i=0;i<amarillas.length;i++){
            System.out.println("Este es el jugador: "+i +":"+amarillas[i]);
        }
         
       System.out.println("rojas");
         for(int i=0;i<rojas.length;i++){
            System.out.println("Este es el jugador: "+i +":"+rojas[i]);
        }
         
        System.out.println("recibidas");
         for(int i=0;i<faltasrecibidas.length;i++){
            System.out.println("Este es el jugador: "+i +":"+faltasrecibidas[i]);
        }
    }
    
    
    /*Retorna las faltas por equipo*/
    public int[] getFaltasPorEquipo(){
           int arreglo[]=new int[2];
       int i;
       
          for(i=0;i<local.length;i++){
          arreglo[0]+=faltas[i];
      }
      
      for(i=local.length;i<faltas.length;i++){
          arreglo[1]+=faltas[i];
      }
           
       return arreglo;
    }
    /*Retorna las rojas por equipo*/
      public int[] getRojasPorEquipo(){
           int arreglo[]=new int[2];
       int i;
       
          for(i=0;i<local.length;i++){
          arreglo[0]+=rojas[i];
      }
      
      for(i=local.length;i<faltas.length;i++){
          arreglo[1]+=rojas[i];
      }
           
       return arreglo;
    }
      
      
      /*Retorna las amarillas por equipo*/
      
          public int[] getAmarillasPorEquipo(){
           int arreglo[]=new int[2];
       int i;
       
          for(i=0;i<local.length;i++){
          arreglo[0]+=amarillas[i];
      }
      
      for(i=local.length;i<faltas.length;i++){
          arreglo[1]+=amarillas[i];
      }
           
       return arreglo;
    }
    
    public int getFaltas_pos(int pos, int equipo) {
        int[] arrayL = new int[local.length];
        int[] arrayV = new int[visitante.length];
        int i;
        if (equipo==0){
            for(i=0; i < local.length; i++){
                arrayL[i] = faltas[i];
            }
            return arrayL[pos];
        }else{
            for(i=0; i < faltas.length-local.length; i++){
                arrayV[i] = faltas[i + local.length];
            }
            return arrayV[pos];
        }
    }
    
    public int getAmarillas_pos(int pos, int equipo) {
        int[] arrayL = new int[local.length];
        int[] arrayV = new int[visitante.length];
        int i;
        if (equipo==0){
            for(i=0; i < local.length; i++){
                arrayL[i] = amarillas[i];
            }
            return arrayL[pos];
        }else{
            for(i=0; i < faltas.length-local.length; i++){
                arrayV[i] = amarillas[i + local.length];
            }
            return arrayV[pos];
        }
    }
    
    public int getRojas_pos(int pos, int equipo) {
        int[] arrayL = new int[local.length];
        int[] arrayV = new int[visitante.length];
        int i;
        if (equipo==0){
            for(i=0; i < local.length; i++){
                arrayL[i] = rojas[i];
            }
            return arrayL[pos];
        }else{
            for(i=0; i < faltas.length-local.length; i++){
                arrayV[i] = rojas[i + local.length];
            }
            return arrayV[pos];
        }
    }
}
